package com.dl.mall.service.user;

import com.dl.mall.entity.Page;
import com.dl.mall.entity.Product;
import com.dl.mall.entity.ProductSpecs;
import com.dl.mall.entity.user.OrderInfo;
import com.dl.mall.info.BrandInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 产品类服务层
 * @author DL
 * @create 2022-03-23 15:36
 */
public interface ProductService {

    /**
     * 用户购物，根据 订单 扣除库存
     * @param orderInfoList 订单商品信息
     * @return 结果
     */
    int deductSpecsStock(List<OrderInfo> orderInfoList);

    /**
     * 订单取消，根据 订单 恢复库存
     * @param orderInfoList 订单商品信息
     * @return 结果
     */
    int recoverySpecsStock(List<OrderInfo> orderInfoList);


    /**
     * 根据 产品id 查询产品
     * @param productId 产品id
     * @return 产品
     */
    Product getProductById(String productId);

    /**
     * 根据 产品id + 配置 搜索sku
     * @param productId 产品id
     * @param productSpecs 产品规格
     * @return 产品
     */
    ProductSpecs getProductBySpecs(String productId, String productSpecs);

    /**
     * 根据 品牌id 查询某品牌产品（枚举）
     * @param brandId 品牌id
     * @return 分页结果
     */
    Page<Product> getProductByBrandId(BrandInfo brandId, int currentPage, int pageSize);

    /**
     * 根据 品牌id 查询某品牌产品
     * @param brandId 品牌id
     * @return 分页结果
     */
    Page<Product> getProductByBrandId(int brandId, int currentPage, int pageSize);

    /**
     * 所有产品普通分页
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    Page<Product> getProductPage(int currentPage, int pageSize);

    /**
     * 根据 关键字 查询产品
     * @return 产品集合
     */
    Page<Product> getProductByKeyWord(String keyWord, int currentPage, int pageSize);

    /**
     * 随机查询手机
     * @param maximum 最大查询
     * @return 手机
     */
    List<Product> getPhoneByRandom(Integer maximum);

    /**
     * 随机查询电脑
     * @param maximum 最大查询
     * @return 电脑
     */
    List<Product> getComputerByRandom(Integer maximum);

    /**
     * 随机查询智能设备
     * @param maximum 最大查询
     * @return 智能设备
     */
    List<Product> getIntelligentByRandom(Integer maximum);

    /**
     * 随机查询配件
     * @param maximum 最大查询
     * @return 配件
     */
    List<Product> getAccessoryByRandom(Integer maximum);

    /**
     * 根据 规格id 查询产品 SKU
     * @param specsId 规格id
     * @return SKU
     */
    ProductSpecs getProductSpecsBySpecsId(String specsId);

    /**
     * 秒杀扣除库存
     * @param specsId 规格id
     * @param total 总数
     * @return 结果
     */
    boolean deductSpecsStockSeckill(String specsId, Integer total);


}
